home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Archives / ForCLI / 0Utils13.lha / 0Utils / ScriptName.c < prev    next >
C/C++ Source or Header  |  1995-03-20  |  4KB  |  158 lines

  1.  
  2. /******************************************************************************
  3.  
  4.     MODULE
  5.     ScriptName.c
  6.  
  7.     DESCRIPTION
  8.     Tries to recognize the name of the currently
  9.     active scriptfile.
  10.  
  11.     NOTES
  12.     Kickstart 2.0+ required
  13.     compiles w/ SAS/C v6.51
  14.  
  15.     BUGS
  16.     The result is most likely something like
  17.     'T:Command-??-T??' with ? being numbers,
  18.     if the system 'decided' to create a tempfile;
  19.     Up to now we can not get another result,
  20.     for if no tempfile is created, we get an
  21.     empty string =8-(.
  22.  
  23.     TODO
  24.  
  25.     EXAMPLES
  26.  
  27.     SEE ALSO
  28.  
  29.     INDEX
  30.  
  31.     HISTORY
  32.     16-02-95 b_noll created
  33.     20-02-95 b_noll restructured source
  34.     21-02-95 b_noll added version/format-prefix/offset
  35.     27-02-95 b_noll replace BSTR extraction by FPrintf %b
  36.     20-03-95 b_noll added args diagnostics
  37.  
  38.     AUTHOR
  39.     Bernd Noll, Brunnenstrasse 55, D-67661 Kaiserslautern
  40.     b_noll@informatik.uni-kl.de
  41.  
  42. ******************************************************************************/
  43.  
  44. /**************************************
  45.         Includes
  46. **************************************/
  47.  
  48. #ifndef   EXEC_LIBRARIES_H
  49. # include <exec/libraries.h>
  50. #endif /* EXEC_LIBRARIES_H */
  51.  
  52. #ifndef   CLIB_EXEC_PROTOS_H
  53. # include <clib/exec_protos.h>
  54. #endif /* CLIB_EXEC_PROTOS_H */
  55.  
  56. #ifndef   DOS_DOS_H
  57. # include <dos/dos.h>
  58. #endif /* DOS_DOS_H */
  59.  
  60. #ifndef   CLIB_DOS_PROTOS_H
  61. # include <clib/dos_protos.h>
  62. #endif /* CLIB_DOS_PROTOS_H */
  63.  
  64. #include <proto/dos.h>
  65. #include <proto/exec.h>
  66.  
  67. /**************************************
  68.      Defines & Structures
  69. **************************************/
  70.  
  71. #ifndef ABSEXECBASE
  72. #define ABSEXECBASE ((struct ExecBase **)4L)
  73. #endif
  74.  
  75. struct _arg {
  76. /* ******************** USER FORMAT ******************** */
  77. #define FORMAT ","
  78.  
  79.     int dummy;
  80.  
  81. /* ******************** USER FORMAT ******************** */
  82. }; /* struct _argv */
  83.  
  84. #define MAXPATHLEN 256
  85. #define MAXLINELEN 256
  86.  
  87. #define VERSIONPREFIX    "\0$VER: "
  88. #define VERSIONOFFSET    0
  89. #define FORMATPREFIX    "\0$ARG: "
  90. #define FORMATOFFSET    7
  91.  
  92. /**************************************
  93.         Implementation
  94. **************************************/
  95.  
  96. long _main (void)
  97. {
  98.     const char* version = VERSIONPREFIX "ScriptName 1.2 " __AMIGADATE__  + VERSIONOFFSET;
  99.     long retval = RETURN_FAIL;
  100.     struct ExecBase*SysBase = *ABSEXECBASE;
  101.     struct Library* DOSBase;
  102.  
  103.     if (DOSBase = OpenLibrary (DOSNAME, 37)) {
  104.     struct _arg argv = { 0 };
  105.     APTR   args;
  106.     retval     = RETURN_ERROR;
  107.     if (args = (void*)ReadArgs(FORMATPREFIX FORMAT + FORMATOFFSET, (LONG*)&argv, NULL)) {
  108. /* ******************** USER BODY ******************** */
  109.  
  110.         //struct Process          *pr;
  111.         struct CommandLineInterface *cli;
  112.         //pr = (struct Process *)FindTask(NULL);
  113.  
  114.         if (cli = Cli()) {
  115.  
  116.         if (cli->cli_Interactive) {
  117.             retval = RETURN_ERROR;
  118.             SetIoErr(ERROR_OBJECT_WRONG_TYPE);
  119.             //PutStr ("* Not in a Script *\n");
  120.         } else if (cli->cli_CommandFile) {
  121.             //from = BADDR(cli->cli_CommandFile);
  122.  
  123. /* Bah! this is in fact a _PSEUDO_ BSTR: 'len' is totally undefined */
  124.  
  125.             //// this would be: get BSTR
  126.             //while (len--)
  127.             //      if (!(buffer[len] = from[len]))
  128.             //          buffer[len] = '\0';
  129.  
  130.             retval = RETURN_OK;
  131.  
  132.             FPrintf(Output(), "%b\n", cli->cli_CommandFile);
  133.         } else {
  134.             retval = RETURN_WARN;
  135.             //PutStr ("* No ScriptName *\n");
  136.             SetIoErr(ERROR_OBJECT_NOT_FOUND);
  137.         } /* if */
  138.         } else {
  139.         SetIoErr(ERROR_OBJECT_WRONG_TYPE);
  140.         } /* if */
  141.  
  142. /* ******************** USER BODY ******************** */
  143.         FreeArgs (args);
  144.     } /* if */
  145.  
  146.     if (retval > RETURN_WARN)
  147.         PrintFault(IoErr(), "ScriptName");
  148.  
  149.     CloseLibrary (DOSBase);
  150.     } /* if */
  151.     return (retval);
  152. } /* _main */
  153.  
  154. /******************************************************************************
  155. *****  END ScriptName.c
  156. ******************************************************************************/
  157.  
  158.